<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
            原型链
                => 一个由__proto__串联起来的链状结构 我们称为原型链

            原型对象 函数身上天生自带的一个属性 是一个对象数据类型  叫prototype
            对象原型 对象身上天生自带的一个属性  __proto__ 指向所属的原型对象
            纯粹的对象数据类型 都是 Object 的实例
            所有的函数都是大写(Function)的实例



            
            问题1: p(实例)的__proto__指向哪里?

            问题2: Person的__proto__指向哪里?
                => 所有的函数都是大写(Function)的实例

            问题3:  Person.prototype的__proto__指向哪里?

            问题4: Object的__proto__指向哪里?

            问题5: Function.prototype的__proto__指向哪里?

            问题6: Object.prototype的__proto__指向哪里?
                => Object.prototype.__proto__ = null
                =>我们称 Object.prototype为顶级原型(顶级原型对象)

            问题7: Function 的__proto__指向哪里?
                => 在js中Function 自己是自己的原型对象  自己也是自己的实例
        */

        function Person(name, age, gender) {
            this.name = name
            this.age = age
            this.gender = gender
        }
        const p = new Person('张三', 18, '男')
        // console.log(p);


        // p(实例)的__proto__指向哪里 ?
        console.log(p.__proto__ === Person.prototype);

        // Person的__proto__指向哪里?
        console.log(Person.__proto__ === Function.prototype);

        // Person.prototype的__proto__指向哪里?

        console.log(Person.prototype.__proto__ === Object.prototype);

        // Object的__proto__指向哪里?

        console.log(Object.__proto__ === Function.prototype);

        // Function.prototype的__proto__指向哪里?
        console.log(Function.prototype.__proto__ === Object.prototype);

        // Object.prototype的__proto__指向哪里?
        console.log(Object.prototype.__proto__);

        // Function 的__proto__指向哪里?

        console.log(Function.__proto__ === Function.prototype);
    </script>
</body>

</html>